<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 脚本中的代码从加载到执行
    //  1. 语法解析 => 通篇排查脚本中是否存在语法错误(SyntaxError),如果有语法错误,脚本不执行
    // 2. 预编译 => 代码执行前的准备工作 1. 变量提升 2. 确定函数体
    // 3. 解释执行

    // var a = 1;
    // console.log(a);

    // console.log(aa); // 定义错误

    // var b = 2;
    // console.log(b);
    // var c = a + b;
    // console.log(c);


    // JS  异常捕获
    // try {
    //     tryCode - 尝试执行的代码段
    // } catch (err) {
    //     catchCode - 捕获错误的代码块(错误发生时的处理或补救性措施)
    // } finally {
    //     finallyCode - 无论 try / catch 结果如何都会执行的代码块
    // }
    // 注意： catch 和 finally 语句都是可选的，但你在使用 try 语句时必须至少使用一个。


    try {
        var a = 1;
        console.log(a);

        // 常见错误的类型(错误创建)
        // Error    通用错误

        // EvalError
        // 与eval()有关， 当调用 eval() 失败时抛出。
        // RangeError
        // 数值变量或参数超出了其有效范围
        // ReferenceError
        // 一个无效的引用(eg: strict模式下引用了一个未声明的变量等)
        // SyntaxError
        // 当 JavaScript 语法错误时抛出。
        // TypeError
        // 变量或参数不属于有效类型


        var err = new Error("请传入正确的参数");
        console.dir(err);
        throw err;


    } catch (err) {
        console.log(err);
        // throw err;
    } finally {
        console.log("后续执行的代码");
    }










</script>

</html>